package cmc

import (
	"context"
	model "service/model/crm_base"
	"service/model/mod"

	gpb "gitee.com/cloudapex/protos/crm_base/pb"
	"gitee.com/cloudapex/ulern/htp"
	"gitee.com/cloudapex/ulern/util"
	"github.com/gin-gonic/gin"
)

/*
 * 描述: 项目配置列表
 * 路由: energy/projConfList
 * 方法: POST
 *********************************************************************/
type ProjConfList struct {
	PId int64 `form:"pId" json:"pId" binding:"omitempty"` //项目ID
}

// 说明：项目配置列表 出参
type ProConfigRes struct {
	Id       uint64 `json:"id"`       // 项目配置id
	CId      int64  `json:"cId"`      // 公司id
	PId      int64  `json:"pId"`      // 项目id
	AbsDay   int64  `json:"absDay"`   // 绝对天数
	RelDay   int64  `json:"relDay"`   // 相对天数
	FAoutS   int64  `json:"fAoutS"`   // 首资自动获取时间间隔
	WareType int64  `json:"wareType"` // 仓库分配方式（ 按位分配：1：由高到低 来10个，2：自主筛选 ）
	StartAt  int64  `json:"startAt"`  //  仓库开放开始时间
	EndAt    int64  `json:"endAt"`    // 仓库开放结束时间
	FType    int64  `json:"fType"`    // 首资分配方式 1手动 2自动
	IsStart  int64  `json:"isStart"`  // 是否起用 0 否，1 是

	PName string `json:"pName"` // 项目名称

}

func (this *ProjConfList) Handle(c *gin.Context, ctx context.Context) htp.Response {
	//传参

	list, err := model.ProjConf.GetProParamList(ctx, &gpb.ProConfReq{
		ProConf: &gpb.ProConfig{
			PId: this.PId,
		},
	})
	if nil != err || list == nil {
		return htp.RespParamErr("", err)
	}

	//映射
	items := []*ProConfigRes{}
	if err := util.Convert(&items, list.ProConf); err != nil {
		return htp.RespConvertErr("", err)
	}
	//  设置参数
	this.SetParamList(c, ctx, items)

	return htp.RespOK("", &struct {
		Total int64       `json:"total"`
		List  interface{} `json:"list"`
	}{list.Count, items})

}

/*
 * 描述: 项目参数设置
 * 路由: energy/updateProjConf
 * 方法: POST
 *********************************************************************/
type UpdateProjConf struct {
	Id       int64 `form:"id" json:"id,omitempty"`             //机会ID
	AbsDay   int64 `form:"absDay" json:"absDay,omitempty"`     //-- 绝对天数
	RelDay   int64 `form:"relDay" json:"relDay,omitempty"`     //	-- 相对天数
	FAoutS   int64 `form:"fAoutS" json:"fAoutS,omitempty"`     //	-- 首资自动获取时间间隔
	WareType int64 `form:"wareType" json:"wareType,omitempty"` //	-- 仓库分配方式（ 按位分配：由高到低 来10个，自主筛选 ）
	StartAt  int64 `form:"startAt" json:"startAt,omitempty"`   //--  仓库开放开始时间
	EndAt    int64 `form:"endAt" json:"endAt,omitempty"`       //-- 仓库开放结束时间
	FType    int64 `form:"fType" json:"fType,omitempty"`       //-- 首资分配方式
	IsStart  int64 `form:"isStart" json:"isStart,omitempty"`   //-- 是否起用 0 否，1 是

}

func (this *UpdateProjConf) Handle(c *gin.Context, ctx context.Context) htp.Response {
	req := &gpb.ProConfig{
		Id:       this.Id,
		AbsDay:   this.AbsDay,
		RelDay:   this.RelDay,
		FAoutS:   this.FAoutS,
		WareType: this.WareType,
		StartAt:  this.StartAt,
		EndAt:    this.EndAt,
		FType:    this.FType,
		IsStart:  this.IsStart,
	}
	_, err := model.ProjConf.EditProParam(ctx, req)
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", "")
}

//	设置参数
func (this *ProjConfList) SetParamList(c *gin.Context, ctx context.Context, res []*ProConfigRes) {
	jwtUser := mod.CurrUser(c)
	cId := jwtUser.CId
	ids := make([]int64, 0)
	for _, resf := range res {
		ids = append(ids, resf.PId)
	}
	ids = util.RemoveDuplicate64(ids)
	names, _ := model.Proj.GetProjIdNames(ctx, cId)
	util.Debug("names:%v, ids:%v", names, ids)
	for _, beanf := range res {
		beanf.PName = names[beanf.PId]
	}

}
